import java.util.Arrays;
import java.util.PriorityQueue;

public class PriorityQueueMethods {
    public static void main(String[] args) {
        // 创建一个小顶堆
        PriorityQueue<Integer> pq = new PriorityQueue<>();
        
        // 添加元素
        pq.offer(5);
        pq.offer(2);
        pq.offer(8);
        pq.offer(1);
        System.out.println("添加元素后: " + pq);  // 内部存储：[1, 2, 8, 5]
        
        // 查看头部元素
        System.out.println("头部元素（peek）: " + pq.peek());  // 1
        
        // 移除并返回头部元素
        System.out.println("移除的元素（poll）: " + pq.poll());  // 1
        System.out.println("poll后队列: " + pq);  // [2, 5, 8]
        
        // 判断是否包含元素
        System.out.println("是否包含5: " + pq.contains(5));  // true
        
        // 批量添加元素
        pq.addAll(Arrays.asList(3, 6));
        System.out.println("批量添加后: " + pq);  // [2, 3, 8, 5, 6]
        
        // 遍历元素（注意：迭代顺序不是优先级顺序）
        System.out.print("迭代器遍历: ");
        for (int num : pq) {
            System.out.print(num + " ");  // 可能输出：2 3 8 5 6
        }
        System.out.println();
        
        // 按优先级顺序输出所有元素
        System.out.print("按优先级出队: ");
        while (!pq.isEmpty()) {
            System.out.print(pq.poll() + " ");  // 2 3 5 6 8
        }
    }
}